// 根据指示信号select的不同，对输入信号a,b实现不同的运算。
// 输入信号a、b为8bit有符号数，
// 当select[1:0] = 0，输出a；
// 当select[1:0] = 1，输出b；
// 当select[1:0] = 2，输出a+b；
// 当select[1:0] = 3，输出a-b。

// 如果表达式中有一个无符号数，则所有的操作数都会被强行转换为无符号数；


module top(
           input clk,
           input rst_n,
           input signed [7: 0] a,
           input signed [7: 0] b,
           output [1: 0] select,
           output reg signed [8: 0] c
       );

always@(posedge clk or negedge rst_n)
	begin
		if (!rst_n)
			c <= 9'd0;
		else
			begin
				case (select)
					2'b00:
						c <= {a[7], a};
					2'b01:
						c <= {b[7], b};
					2'b10:
						c <= {{a[7], a} + {b[7], b}};
					2'b11:
						c <= {{a[7], a} - {b[7], b}};
					default:
						c <= 9'd0;
				endcase
			end
	end


endmodule
